// 认证相关工具函数

/**
 * 保存用户token
 * @param {string} token - 用户token
 */
export const saveUserToken = (token) => {
  localStorage.setItem('userToken', token)
}

/**
 * 获取用户token
 * @returns {string|null} token
 */
export const getUserToken = () => {
  return localStorage.getItem('userToken')
}

/**
 * 获取token (getUserToken的别名)
 * @returns {string|null} token
 */
export const getToken = () => {
  return getUserToken()
}

/**
 * 保存管理员token
 * @param {string} token - 管理员token
 */
export const saveAdminToken = (token) => {
  localStorage.setItem('adminToken', token)
}

/**
 * 获取管理员token
 * @returns {string|null} token
 */
export const getAdminToken = () => {
  return localStorage.getItem('adminToken')
}

/**
 * 保存用户信息
 * @param {Object} userInfo - 用户信息
 */
export const saveUserInfo = (userInfo) => {
  localStorage.setItem('userInfo', JSON.stringify(userInfo))
  localStorage.setItem('user', JSON.stringify(userInfo)) // 兼容其他组件
  localStorage.setItem('isLoggedIn', 'true') // 设置登录状态标志
  if (userInfo.email) {
    localStorage.setItem('userEmail', userInfo.email)
  }
}

/**
 * 获取用户信息
 * @returns {Object|null} 用户信息
 */
export const getUserInfo = () => {
  const userInfo = localStorage.getItem('userInfo')
  return userInfo ? JSON.parse(userInfo) : null
}

/**
 * 保存管理员信息
 * @param {Object} adminInfo - 管理员信息
 */
export const saveAdminInfo = (adminInfo) => {
  localStorage.setItem('adminInfo', JSON.stringify(adminInfo))
  localStorage.setItem('isAdminLoggedIn', 'true')
}

/**
 * 获取管理员信息
 * @returns {Object|null} 管理员信息
 */
export const getAdminInfo = () => {
  const adminInfo = localStorage.getItem('adminInfo')
  return adminInfo ? JSON.parse(adminInfo) : null
}

/**
 * 检查用户是否已登录
 * @returns {boolean} 是否已登录
 */
export const isUserLoggedIn = () => {
  const hasToken = !!getUserToken()
  const hasFlag = localStorage.getItem('isLoggedIn') === 'true'
  return hasToken && hasFlag
}

/**
 * 检查管理员是否已登录
 * @returns {boolean} 是否已登录
 */
export const isAdminLoggedIn = () => {
  const hasToken = !!getAdminToken()
  const hasFlag = localStorage.getItem('isAdminLoggedIn') === 'true'
  return hasToken && hasFlag
}

/**
 * 用户登出
 */
export const userLogout = async () => {
  try {
    // 调用后端登出API删除Redis中的token
    const api = await import('@/utils/api')
    await api.default.post('/user/logout')
  } catch (error) {
    console.warn('调用登出API失败:', error)
  }

  // 清除本地存储
  localStorage.removeItem('userToken')
  localStorage.removeItem('userInfo')
  localStorage.removeItem('userEmail')
  localStorage.removeItem('isLoggedIn')
  localStorage.removeItem('user')
}

/**
 * 管理员登出
 */
export const adminLogout = async () => {
  try {
    // 调用后端登出API删除Redis中的token
    const api = await import('@/utils/api')
    await api.default.post('/admin/logout', {}, {
      headers: {
        'info': getAdminToken()
      }
    })
  } catch (error) {
    console.warn('调用管理员登出API失败:', error)
  }

  // 清除本地存储
  localStorage.removeItem('adminToken')
  localStorage.removeItem('adminInfo')
  localStorage.removeItem('isAdminLoggedIn')
}

/**
 * 获取当前用户角色
 * @returns {string} 用户角色 (user|admin|null)
 */
export const getCurrentUserRole = () => {
  if (isAdminLoggedIn()) {
    return 'admin'
  } else if (isUserLoggedIn()) {
    return 'user'
  }
  return null
}

/**
 * 检查用户权限
 * @param {string} requiredRole - 需要的角色
 * @returns {boolean} 是否有权限
 */
export const hasPermission = (requiredRole) => {
  const currentRole = getCurrentUserRole()

  if (requiredRole === 'admin') {
    return currentRole === 'admin'
  } else if (requiredRole === 'user') {
    return currentRole === 'user' || currentRole === 'admin'
  }

  return false
}

/**
 * 检查登录状态并打印调试信息
 */
export const checkLoginStatus = () => {
  const userToken = getUserToken()
  const adminToken = getAdminToken()
  const userInfo = getUserInfo()
  const adminInfo = getAdminInfo()

  console.log('当前登录状态:', {
    userToken: userToken ? userToken.substring(0, 20) + '...' : null,
    adminToken: adminToken ? adminToken.substring(0, 20) + '...' : null,
    userInfo: userInfo,
    adminInfo: adminInfo,
    isUserLoggedIn: isUserLoggedIn(),
    isAdminLoggedIn: isAdminLoggedIn()
  })

  return {
    hasUserToken: !!userToken,
    hasAdminToken: !!adminToken,
    hasUserInfo: !!userInfo,
    hasAdminInfo: !!adminInfo,
    isUserLoggedIn: isUserLoggedIn(),
    isAdminLoggedIn: isAdminLoggedIn()
  }
}

/**
 * 检查用户角色是否符合要求
 * @param {string} requiredRole - 需要的角色 ('tenant', 'landlord', 'agent')
 * @returns {boolean} 是否有权限
 */
export const checkUserRole = (requiredRole) => {
  const userInfo = getUserInfo()
  if (!userInfo || !userInfo.role) {
    return false
  }

  const roleMap = {
    'tenant': 1,    // 普通用户/租客
    'landlord': 2,  // 房东
    'agent': 4      // 中介
  }

  return userInfo.role === roleMap[requiredRole]
}

/**
 * 检查用户是否可以申请中介（只有普通用户可以申请）
 * @returns {boolean} 是否可以申请
 */
export const canApplyAgent = () => {
  return checkUserRole('tenant')
}

/**
 * 检查用户是否可以发布房源（只有普通用户和房东可以发布）
 * @returns {boolean} 是否可以发布
 */
export const canPublishHouse = () => {
  return checkUserRole('tenant') || checkUserRole('landlord')
}

/**
 * 检查用户是否可以访问房东功能
 * @returns {boolean} 是否可以访问
 */
export const canAccessLandlordFeatures = () => {
  return checkUserRole('landlord')
}

/**
 * 检查用户是否可以访问中介功能
 * @returns {boolean} 是否可以访问
 */
export const canAccessAgentFeatures = () => {
  return checkUserRole('agent')
}